#ifndef NANE_MODULE__H
#   define NANE_MODULE__H

#   include "nane/core/crt/IModule.h"
#   include "nane/core/crt/DynamicModule.h"
#   include "nane/core/SubSystemProduct.h"
#   include "nane/core/crt/ModuleManagerImpl_.h"

namespace nane
{
    
    class Module
        : public Disposable<Module, SubSystemProductImplBase<ModuleManager::Implementation, ModuleHandle*, IModule> >
    {
    public:
        Module( ModuleManager::Implementation* _creator, ModuleHandle* _handle, const ModuleInfo* _info, const char* _name );
        ~Module();

    private:
        const ModuleInfo* GetInfo();
        const char* GetName();
        
    private:
        const ModuleInfo* m_info;
        char* m_name;
    };
    
}   // namespace nane

#endif	// NANE_MODULE__H
